 1.文本文件数据编码
   
   Hive表中的数据在存储在文件系统上，Hive定义了默认的存储格式，也支持用户自
定义文件存储格式。
   Hive默认使用几个很少出现在字段值中的控制字符，来表示替换默认分隔符的字符。
   Hive默认分隔符
   分隔符  换行符    
   \n      换行符     用于分隔行。每一行是一条记录，使用换行符分割数据
   ^A    < Ctrl >+A   用于分隔字段。在CREATE TABLE语句中使用八进制编码\001表示
   ^B    < Ctrl >+B   用于分隔 ARRAY、MAP、STRUCT 中的元素。在CREATE
                      TABLE语句中使用八进制编码\002表示
   ^C    < Ctrl +C>   Map中 key、value之间的分隔符。在CREATE TABLE语句
                      中使用八进制编码\003表示
   Hive 中没有定义专门的数据格式，数据格式可以由用户指定，用户定义数据格式需
要指定三个属性：列分隔符（通常为空格、"\t"、"\x001"）、行分隔符（"\n"）以及
读取文件数据的方法。
   在加载数据的过程中，Hive 不会对数据本身进行任何修改，而只是将数据内容复制
或者移动到相应的 HDFS 目录中。
   将 Hive 数据导出到本地时，系统默认的分隔符是^A、^B、^C 这些特殊字符，使用
cat 或者 vim 是看不到的；
   在 vi 中输入特殊字符：
   (Ctrl + v) + (Ctrl + a) => ^A
   (Ctrl + v) + (Ctrl + b) => ^B
   (Ctrl + v) + (Ctrl + c) => ^C
   ^A / ^B / ^C 都是特殊的控制字符，使用 more 、 cat 命令是看不见的；可以使用
cat -A file.dat
 
   id name age hobby(array) score(map)
   字段之间：^A
   元素之间: ^B
   key-value之间：^C
   666^Alisi^A18^Aread^Bgame^Ajava^C97^Bhadoop^C87
    create table s1(
    id int,
    name string,
    age int,
    hobby array<string>,
    score map<string, int>
    );
	load data local inpath '/home/hadoop/data/s1.dat' into table s1;
 
  2.读时模式
    
	在传统数据库中，在加载时发现数据不符合表的定义，则拒绝加载数据。数据在写入
数据库时对照表模式进行检查，这种模式称为"写时模式"（schema on write）。
    写时模式 -> 写数据检查 -> RDBMS；
	Hive中数据加载过程采用"读时模式" (schema on read)，加载数据时不进行数据格
式的校验，读取数据时如果不合法则显示NULL。这种模式的优点是加载数据迅速。
    读时模式 -> 读时检查数据 -> Hive；好处：加载数据快；问题：数据显示NULL